Control 2
getwd()
[1] "/Users/christinacomo/Library/CloudStorage/OneDrive-TheUniversityofColoradoDenver/Spatial/raw_data/control2"
infoTable <- tibble(samples, imgs, spotfiles, json, # Add required columns
sample = ("Control2"),
condition = "Control") # Add additional column
Error in tibble(samples, imgs, spotfiles, json, sample = ("Control2"), :
could not find function "tibble"
control2 <- ReadVisiumData(infoTable)
── Reading 10x Visium data ──
ℹ Loading matrices:
→ Finished loading expression matrix 1
✔ There are 32285 features and 1620 spots in the expression matrix.
ℹ Loading coordinates:
→ Finished loading coordinates for sample 1
ℹ Collected coordinates for 1620 spots.
── Creating `Seurat` object
✔ Expression matrices and coordinates are compatible
ℹ Created `Seurat` object
ℹ Created `Staffli` object
✔ Returning a `Seurat` object with 32285 features and 1620 spots


# Normalize data and find variable features for Visium data
control2 <- control2 |>
NormalizeData() |>
FindVariableFeatures(nfeatures = 10000) |>
ScaleData() |>
RunPCA() |>
FindNeighbors(reduction = "pca", dims = 1:30) |>
FindClusters(verbose = FALSE) |>
RunUMAP(reduction = "pca", dims = 1:30)
Normalizing layer: counts
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Finding variable features for layer counts
Calculating gene variances
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Centering and scaling data matrix
|
| | 0%
|
|======== | 10%
|
|=============== | 20%
|
|======================= | 30%
|
|============================== | 40%
|
|====================================== | 50%
|
|============================================== | 60%
|
|===================================================== | 70%
|
|============================================================= | 80%
|
|==================================================================== | 90%
|
|============================================================================| 100%
PC_ 1
Positive: H19, Igf2, Lgals1, Serpinh1, Col3a1, Cdkn1c, Col1a2, Col5a1, Postn, Col1a1
Igfbp5, Mest, Dlk1, Sparc, Igfbp4, Mdk, Fstl1, Anxa2, Itm2a, Cd63
Col5a2, Col6a2, Grb10, Fn1, Mmp2, Col6a1, Col6a3, Fbn2, Capn6, Gpc3
Negative: Nsg2, Rtn1, Tubb3, Tuba1a, Crmp1, Stmn3, Stmn2, Mllt11, Tubb2b, Gpm6a
Dcx, Map2, Islr2, Nnat, Igfbpl1, Sez6, Dpysl5, Elavl3, Mapt, Sept3
Gng3, Foxg1, Uchl1, Ina, Cdk5r1, Tagln3, Apc2, Tbr1, Sox11, Kif21b
PC_ 2
Positive: Gm42418, Lars2, Malat1, Mip, Lim2, Cryba4, Gje1, Gja8, Cryba1, Neurog2
Crygf, Capn3, Crygn, Crybb3, Cryba2, Bc1, Bfsp1, Grifin, Gja3, Crygd
Crybb1, Crygb, Crygc, Cryaa, Cryge, Vit, Cryga, Aldh1a1, Pla2g7, Crygs
Negative: Meg3, Igfbp4, Itm2a, Tmsb10, Fn1, Tpm1, Col26a1, Fbn1, Sulf2, Postn
Eln, Rcn3, Dlk1, Mest, Mmp2, Dnm1, Serpinh1, Col5a1, Bmp1, Col3a1
Col6a2, Map1lc3a, Anxa2, Tgfbi, Igf2, Ppic, Bgn, Kctd12, Cxcl12, Cdkn1c
PC_ 3
Positive: Col2a1, Col11a1, Nrp2, Id3, Lum, Foxc1, Col9a3, Cldn11, Matn4, Rcn3
Col11a2, Aldh1a2, Col8a2, Col12a1, Col9a1, Col16a1, Col1a1, Mgp, Wwp2, Acan
Alpl, Pcolce, Olfml3, Hapln1, Prrx2, Crabp1, Sparc, Apod, Hba-a1, Prrx1
Negative: Tnnt3, Myh8, Tnnc2, Myl4, Myl1, Myh3, Mybph, Tnnt2, Acta1, Mylpf
Tnni2, Actn2, Tnni1, Tceal7, Casq2, Tnnt1, Actc1, Myog, Csrp3, Sln
Mustn1, Ttn, Des, Mymk, Cav3, Tnnc1, Itgb1bp2, Cdh15, Synpo2l, Neb
PC_ 4
Positive: Crygd, Crygc, Cryba2, Crygb, Crygf, Cryga, Lim2, Crygn, Crybb1, Cryba4
Cryge, Mip, Cryba1, Crybb3, Cryaa, Capn3, Gje1, Bfsp1, Gja3, Gja8
Grifin, Aldh1a1, Cryab, Crygs, Pla2g7, Mgarp, Tdrd7, Vit, Crim1, Tmem40
Negative: Nfib, Nfia, Tmsb4x, Neurod6, Neurod2, Zbtb18, Nfix, Satb2, Tcf4, Tiam2
Gm3764, Fezf2, Pantr1, Sox5, Cntn2, Rnd2, Pou3f3, Cdk2ap1, Abracl, 3110039M20Rik
Neurog2, Foxg1, Masp1, Hnrnpab, Lmo1, Zeb2, Eomes, Nrn1, Bcl7a, Mpped1
PC_ 5
Positive: Dcn, Cma1, Cxcl14, Cpa3, Tpsb2, Twist2, Dpt, Agtr2, Selenop, Apoe
F13a1, Stab1, Srgn, Col3a1, Hdc, Akap12, Irx1, Lum, Nfib, Osr1
Tpsab1, Tcf4, Arhgdib, Tgfbr3, Tmeff2, Hoxd8, Hba-a1, Pf4, Apcdd1, Celf2
Negative: Col11a2, Col2a1, Ibsp, Alpl, Col9a3, Col9a2, Wwp2, Mia, Sp7, Gstm1
Snorc, Gsc, Sox9, Kazald1, Hapln1, Cnmd, Col22a1, Panx3, Col9a1, Cytl1
Frzb, Smpd3, Itga10, Ifitm5, Acan, Col11a1, Fzd9, Sgms2, Epcam, Slc13a5
Computing nearest neighbor graph
Computing SNN
Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session20:25:07 UMAP embedding parameters a = 0.9922 b = 1.112
20:25:07 Read 1620 rows and found 30 numeric columns
20:25:07 Using Annoy for neighbor search, n_neighbors = 30
20:25:07 Building Annoy index with metric = cosine, n_trees = 50
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
20:25:07 Writing NN index file to temp file /var/folders/03/fbk073850ml4ww5j08pc82t00000gn/T//RtmpZMWTJp/file554f7579134d
20:25:07 Searching Annoy index using 1 thread, search_k = 3000
20:25:07 Annoy recall = 100%
20:25:07 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
20:25:07 Initializing from normalized Laplacian + noise (using RSpectra)
20:25:07 Commencing optimization for 500 epochs, with 59462 positive edges
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
20:25:08 Optimization finished


getwd()
[1] "/Users/christinacomo/Library/CloudStorage/OneDrive-TheUniversityofColoradoDenver/10xVisium/Spatial/raw.data/mutant1"
infoTable <- tibble(samples, imgs, spotfiles, json, # Add required columns
sample = ("Mutant1"),
condition = "Mutant") # Add additional column
Error: object 'samples' not found
mutant1
An object of class Seurat
32285 features across 2155 samples within 1 assay
Active assay: Spatial (32285 features, 0 variable features)
1 layer present: counts


# Normalize data and find variable features for Visium data
mutant1 <- mutant1 |>
NormalizeData() |>
FindVariableFeatures(nfeatures = 10000) |>
ScaleData() |>
RunPCA() |>
FindNeighbors(reduction = "pca", dims = 1:30) |>
FindClusters(verbose = FALSE) |>
RunUMAP(reduction = "pca", dims = 1:30)
Normalizing layer: counts
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Finding variable features for layer counts
Calculating gene variances
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Centering and scaling data matrix
|
| | 0%
|
|======== | 10%
|
|=============== | 20%
|
|======================= | 30%
|
|============================== | 40%
|
|====================================== | 50%
|
|============================================== | 60%
|
|===================================================== | 70%
|
|============================================================= | 80%
|
|==================================================================== | 90%
|
|============================================================================| 100%
PC_ 1
Positive: H19, Igf2, Lgals1, Serpinh1, Col1a1, Col3a1, Col1a2, Cdkn1c, Itm2a, Dlk1
Sparc, Col5a1, Postn, Mdk, Igfbp4, Anxa2, Igfbp5, Col5a2, Grb10, Mest
Cd63, Col6a3, Capn6, Col6a1, Ccnd3, Ifitm2, Fstl1, Plagl1, Rcn3, Fn1
Negative: Rtn1, Stmn3, Tuba1a, Tubb3, Nsg2, Crmp1, Tubb2b, Stmn2, Nnat, Map2
Uchl1, Mllt11, Gng3, Islr2, Mapt, Igfbpl1, Stmn4, Ina, Dcx, Dpysl5
Hist3h2ba, Scg5, Gpm6a, Snrpn, Pcsk1n, Cdk5r1, Sept3, Elavl3, Dner, Fam57b
PC_ 2
Positive: Neurog2, Aldoc, Lhx2, Eomes, Insm1, Gm3764, Pantr1, Gm42418, Fabp7, Foxg1
Celsr1, AW047730, Mir9-3hg, Nr2e1, Tcf4, Zbtb18, Ttyh1, C130071C03Rik, Rcor2, Pax6
Mip, Sall1, Pou3f3, Ckb, Lim2, Lars2, Gja8, Rnd2, Hes5, Sox3
Negative: Meg3, Igfbp4, Col3a1, Fn1, Dlk1, Sulf2, Rcn3, Col1a2, Col5a2, Col5a1
Postn, Col26a1, Itm2a, Cxcl12, Cd248, Fbn1, Nenf, Islr, Anxa6, Sparc
Ifitm2, Col6a2, Lgals1, Fbln2, Mmp2, Igf2, Selenop, Nid2, Tpm1, Lamb1
PC_ 3
Positive: Foxc1, Cryaa, Crybb1, Crybb3, Cryba1, Crygc, Cryge, Matn4, Cryga, Cryba4
Col2a1, Crygb, Cryba2, Col9a1, Alx1, Crygn, Crygf, Lim2, Crygd, Mgp
Mip, Col9a3, Dkk3, Aldh1a1, Matn1, Col9a2, Gja8, Mia, Capn3, Mmp2
Negative: Acta1, Myh3, Myh8, Mylpf, Actc1, Myl4, Tnnt3, Tnnt1, Tnnc2, Ttn
Tnni1, Myl1, Sln, Tnnt2, Tnni2, Tceal7, Actn2, Tnnc1, Myog, Des
Myh7, Csrp3, Neb, Mybph, Il17b, Itgb1bp2, Tpm2, Casq2, Klhl41, Ckm
PC_ 4
Positive: Nfib, Neurod6, Neurod2, Tmsb4x, Zbtb18, Tbr1, Gm3764, Nfia, Rnd2, Bhlhe22
Tiam2, Eomes, Sox5, Fezf2, Cfl1, Fabp7, Ptn, Insm1, Mn1, Nfix
H3f3b, 3110039M20Rik, Foxg1, Mpped1, Satb2, Cntn2, Pantr1, Masp1, Lhx2, Auts2
Negative: Lim2, Cryba2, Capn3, Mip, Crygn, Cryba4, Crygd, Crybb1, Crygb, Crygc
Gja8, Crygf, Cryba1, Crybb3, Grifin, Cryga, Gje1, Cryge, Gja3, Bfsp1
Cryaa, Mgarp, Cryab, Crygs, Aldh1a1, Pla2g7, Prox1os, Tmem40, Chrng, Prox1
PC_ 5
Positive: Wnt7b, Neurod2, Neurod6, Tbr1, Cntn2, Bhlhe22, Prdm8, Slc17a7, Mpped1, Twist2
Zbtb18, Cryge, Cryga, Cryaa, Cxcl14, Znrf2, Apcdd1, Crygb, Crygc, Fezf2
Fam49a, Cryba1, Crybb3, Abcc8, Sla, Plxna4, Zeb2, Crygf, Crybb1, Tmem132c
Negative: Col2a1, Col9a3, Ecel1, Matn1, Zic4, Col11a2, Col11a1, Mia, Cnmd, Hapln1
Zic1, Pnoc, Wwp2, Hap1, Col9a2, Acan, Mgp, Zcchc12, Dlx6, Col9a1
Dlx1, Zic3, Prdm12, Slc10a4, Isl1, Susd5, Aifm3, Vstm2l, Cytl1, Sox9
Computing nearest neighbor graph
Computing SNN
20:29:24 UMAP embedding parameters a = 0.9922 b = 1.112
20:29:24 Read 2155 rows and found 30 numeric columns
20:29:24 Using Annoy for neighbor search, n_neighbors = 30
20:29:24 Building Annoy index with metric = cosine, n_trees = 50
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
20:29:24 Writing NN index file to temp file /var/folders/03/fbk073850ml4ww5j08pc82t00000gn/T//RtmpZMWTJp/file554f828a716
20:29:24 Searching Annoy index using 1 thread, search_k = 3000
20:29:25 Annoy recall = 100%
20:29:25 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
20:29:25 Initializing from normalized Laplacian + noise (using RSpectra)
20:29:25 Commencing optimization for 500 epochs, with 79378 positive edges
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
20:29:26 Optimization finished
p1 <- DimPlot(mutant1)
p2 <- MapLabels(mutant1, column_name = "seurat_clusters", ncol = 1) &
theme(legend.position = "right")
p1 + p2

MapLabels(mutant1,
column_name = "seurat_clusters",
image_use = "raw",
override_plot_dims = TRUE) +
plot_layout(guides = "collect") &
guides(fill = guide_legend(override.aes = list(size = 5),
ncol = 2)) &
theme(legend.position = "right")

getwd()
[1] "/Users/christinacomo/Library/CloudStorage/OneDrive-TheUniversityofColoradoDenver/Spatial/raw_data/mutant2"
mutant2
An object of class Seurat
32285 features across 1523 samples within 1 assay
Active assay: Spatial (32285 features, 0 variable features)
1 layer present: counts


# Normalize data and find variable features for Visium data
mutant2 <- mutant2 |>
NormalizeData() |>
FindVariableFeatures(nfeatures = 10000) |>
ScaleData() |>
RunPCA() |>
FindNeighbors(reduction = "pca", dims = 1:30) |>
FindClusters(verbose = FALSE) |>
RunUMAP(reduction = "pca", dims = 1:30)
Normalizing layer: counts
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Finding variable features for layer counts
Calculating gene variances
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Centering and scaling data matrix
|
| | 0%
|
|======== | 10%
|
|=============== | 20%
|
|======================= | 30%
|
|============================== | 40%
|
|====================================== | 50%
|
|============================================== | 60%
|
|===================================================== | 70%
|
|============================================================= | 80%
|
|==================================================================== | 90%
|
|============================================================================| 100%
PC_ 1
Positive: H19, Igf2, Col1a2, Col1a1, Lgals1, Col3a1, Serpinh1, Cdkn1c, Col5a1, Sparc
Itm2a, Postn, Col5a2, Igfbp4, Igfbp5, Anxa2, Col6a3, Fstl1, Ifitm2, Cd63
Ccnd3, Col6a1, Rcn3, Capn6, Fn1, Dlk1, Grb10, Col6a2, Gpc3, Tpm1
Negative: Tubb3, Tuba1a, Rtn1, Nsg2, Stmn3, Tubb2b, Crmp1, Sox11, Elavl3, Stmn2
Nnat, Map2, Uchl1, Igfbpl1, Mllt11, Dcx, Ina, Gpm6a, Gng3, Sept3
Islr2, Dpysl5, Hist3h2ba, Map1b, Foxg1, Mapt, Cdk5r1, Rundc3a, Tagln3, Scg5
PC_ 2
Positive: Gm42418, Lars2, Pabpc1, Hbb-y, Hba-a2, Hsd3b6, Hba-x, Hba-a1, Malat1, Tent5c
Alas2, Hbb-bt, Hbb-bh1, Slc25a37, Hbb-bs, Slc4a1, mt-Atp8, Tcf4, Gypa, Car2
Pdzk1ip1, Neurog2, Ccnd2, Bnip3l, Bc1, Nr2e1, Snca, Epb41, Hmgb2, Tspo2
Negative: Tmsb10, Meg3, Actg1, Nrep, Igfbp4, Nenf, Ndn, Dlk1, Itm2a, Maged2
Lrp1, Dnm1, Col3a1, Serpinh1, Sulf2, Atp6v0c, Mmp2, Reep5, Postn, Ly6h
Cfl1, Selenow, Ddost, Nrp2, Fbln2, Itm2c, Col5a1, Bmp1, Cops9, Hspa5
PC_ 3
Positive: Col2a1, Foxc1, Col9a1, Col9a3, Col11a1, Col11a2, Col9a2, Mia, Wwp2, Matn4
Mgp, Fgfr2, Matn1, Fgfr3, Hapln1, Cnmd, Sox9, Acan, Susd5, Six2
Cytl1, Id3, Sfrp1, H1f0, Scd2, Pkm, Prrx2, Actg1, Rarg, Pkdcc
Negative: Ttn, Tnnt2, Tnnc1, Myh3, Tnnt1, Tnni1, Myl4, Myl1, Acta1, Tnnc2
Myh8, Actc1, Actn2, Mylpf, Neb, Tnni2, Des, Mybph, Myog, Tnnt3
Casq2, Sln, Tceal7, Il17b, Mymk, Csrp3, 5430431A17Rik, Synpo2l, Itgb1bp2, Klhl41
PC_ 4
Positive: Hba-a1, Hbb-bt, Hbb-bs, Hba-a2, Hbb-y, Hba-x, Malat1, Alas2, Hsd3b6, Lars2
Gm42418, Slc25a37, Hbb-bh1, Fech, Gypa, Car2, Slc4a1, Blvrb, Bc1, Mkrn1
Snca, Pabpc1, Pdzk1ip1, Celf4, Tent5c, March2, Runx1t1, Mapt, Trim10, Sst
Negative: Pkm, Ldha, Hmgb2, Scd2, Pgk1, Dbi, Hes5, Igfbp2, Mif, Cryab
Dut, Rrm2, Ppp1r14b, Slc2a1, Hes6, Eno1b, Ddr1, Nes, Lhx2, Top2a
Uhrf1, H1f0, Ezr, H1fx, Alyref, Myh8, Gldc, Notch1, Tnnt3, Csrp3
PC_ 5
Positive: Nfib, Pantr1, Fabp7, Mir9-3hg, Eomes, Gm3764, Pou3f3, Tmsb4x, Ube2c, Foxg1
Epha4, Aldoc, Hnrnpab, Hmgb2, Ttyh1, Abracl, Nfia, Cdk2ap1, Neurod6, Insm1
Ccnd2, 3110039M20Rik, Id4, Rnd2, Lhx2, Rrm2, Emx1, Mt1, Nfix, Sox3
Negative: Cryba1, Cryaa, Crybb3, Crybb1, Cryga, Cryge, Crygc, Cryba2, Crygb, Lim2
Cryba4, Crygd, Crygn, Crygf, Capn3, Gja8, Mip, Aldh1a1, Grifin, Gje1
Mgarp, Gja3, Bfsp1, Hmx1, Crygs, Trpm3, Dkk3, Cryab, Atoh7, Tmem40
Computing nearest neighbor graph
Computing SNN
20:34:16 UMAP embedding parameters a = 0.9922 b = 1.112
20:34:16 Read 1523 rows and found 30 numeric columns
20:34:16 Using Annoy for neighbor search, n_neighbors = 30
20:34:16 Building Annoy index with metric = cosine, n_trees = 50
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
20:34:16 Writing NN index file to temp file /var/folders/03/fbk073850ml4ww5j08pc82t00000gn/T//RtmpZMWTJp/file554f60cc6794
20:34:16 Searching Annoy index using 1 thread, search_k = 3000
20:34:17 Annoy recall = 100%
20:34:17 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
20:34:17 Initializing from normalized Laplacian + noise (using RSpectra)
20:34:17 Commencing optimization for 500 epochs, with 54692 positive edges
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
20:34:18 Optimization finished
p1 <- DimPlot(mutant2)
p2 <- MapLabels(mutant2, column_name = "seurat_clusters", ncol = 1) &
theme(legend.position = "right")
p1 + p2


saveRDS(mutant2, "/Users/christinacomo/OneDrive - The University of Colorado Denver/10xVisium/Spatial/RDSfiles/mutant2.semla.rds")
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKLS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CnNldHdkKCIvVXNlcnMvY2hyaXN0aW5hY29tby9PbmVEcml2ZSAtIFRoZSBVbml2ZXJzaXR5IG9mIENvbG9yYWRvIERlbnZlci8xMHhWaXNpdW0vU3BhdGlhbC9yYXcuZGF0YS9jb250cm9sMS8iKQpnZXR3ZCgpCgpzYW1wbGVzIDwtICgiLi9maWx0ZXJlZF9mZWF0dXJlX2JjX21hdHJpeC5oNSIpCmltZ3MgPC0gIi4vdGlzc3VlX2xvd3Jlc19pbWFnZS5wbmciCnNwb3RmaWxlcyA8LSAiLi90aXNzdWVfcG9zaXRpb25zX2xpc3QuY3N2Igpqc29uIDwtICIuL3NjYWxlZmFjdG9yc19qc29uLmpzb24iCmBgYAoKYGBge3J9CmluZm9UYWJsZSA8LSB0aWJibGUoc2FtcGxlcywgaW1ncywgc3BvdGZpbGVzLCBqc29uLCAjIEFkZCByZXF1aXJlZCBjb2x1bW5zCiAgICAgICAgICAgICAgICAgICAgc2FtcGxlID0gKCJDb250cm9sMSIpLAogICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9ICJDb250cm9sIikgIyBBZGQgYWRkaXRpb25hbCBjb2x1bW4KYGBgCgpgYGB7cn0KY29udHJvbDEgPC0gUmVhZFZpc2l1bURhdGEoaW5mb1RhYmxlKQpjb250cm9sMQpgYGAKCmBgYHtyfQpzcGF0aWFsX2RhdGEgPC0gR2V0U3RhZmZsaShjb250cm9sMSkKY29udHJvbDEgPC0gTG9hZEltYWdlcyhjb250cm9sMSkKSW1hZ2VQbG90KGNvbnRyb2wxKQpgYGAKCmBgYHtyfQpwIDwtIE1hcEZlYXR1cmVzU3VtbWFyeShjb250cm9sMSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gIm5GZWF0dXJlX1NwYXRpYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgc3VicGxvdF90eXBlID0gInZpb2xpbiIpCnAKYGBgCgpgYGB7cn0KIyBOb3JtYWxpemUgZGF0YSBhbmQgZmluZCB2YXJpYWJsZSBmZWF0dXJlcyBmb3IgVmlzaXVtIGRhdGEKY29udHJvbDEgPC0gY29udHJvbDEgfD4KICBOb3JtYWxpemVEYXRhKCkgfD4KICBGaW5kVmFyaWFibGVGZWF0dXJlcyhuZmVhdHVyZXMgPSAxMDAwMCkgfD4KICBTY2FsZURhdGEoKSB8PiAKICBSdW5QQ0EoKSB8PiAKICBGaW5kTmVpZ2hib3JzKHJlZHVjdGlvbiA9ICJwY2EiLCBkaW1zID0gMTozMCkgfD4gCiAgRmluZENsdXN0ZXJzKHZlcmJvc2UgPSBGQUxTRSkgfD4gCiAgUnVuVU1BUChyZWR1Y3Rpb24gPSAicGNhIiwgZGltcyA9IDE6MzApCmBgYAoKYGBge3J9CnAxIDwtIERpbVBsb3QoY29udHJvbDEpCnAyIDwtIE1hcExhYmVscyhjb250cm9sMSwgY29sdW1uX25hbWUgPSAic2V1cmF0X2NsdXN0ZXJzIiwgbmNvbCA9IDEpICYKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQpwMSArIHAyCmBgYAoKYGBge3J9Ck1hcExhYmVscyhjb250cm9sMSwgCiAgICAgICAgICBjb2x1bW5fbmFtZSA9ICJzZXVyYXRfY2x1c3RlcnMiLCAKICAgICAgICAgIGltYWdlX3VzZSA9ICJyYXciLCAKICAgICAgICAgIG92ZXJyaWRlX3Bsb3RfZGltcyA9IFRSVUUpICsKICBwbG90X2xheW91dChndWlkZXMgPSAiY29sbGVjdCIpICYKICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemUgPSA1KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSAmCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikKYGBgCmBgYHtyfQpzYXZlUkRTKGNvbnRyb2wxLCAiL1VzZXJzL2NocmlzdGluYWNvbW8vT25lRHJpdmUgLSBUaGUgVW5pdmVyc2l0eSBvZiBDb2xvcmFkbyBEZW52ZXIvMTB4VmlzaXVtL1NwYXRpYWwvUkRTZmlsZXMvY29udHJvbDEuc2VtbGEucmRzIikKYGBgCgojIENvbnRyb2wgMiAKYGBge3J9CmxpYnJhcnkodGliYmxlKQpsaWJyYXJ5KHNlbWxhKQpzZXR3ZCgiL1VzZXJzL2NocmlzdGluYWNvbW8vT25lRHJpdmUgLSBUaGUgVW5pdmVyc2l0eSBvZiBDb2xvcmFkbyBEZW52ZXIvU3BhdGlhbC9yYXdfZGF0YS9jb250cm9sMi8iKQpnZXR3ZCgpCgpzYW1wbGVzIDwtICgiLi9maWx0ZXJlZF9mZWF0dXJlX2JjX21hdHJpeC5oNSIpCmltZ3MgPC0gIi4vdGlzc3VlX2xvd3Jlc19pbWFnZS5wbmciCnNwb3RmaWxlcyA8LSAiLi90aXNzdWVfcG9zaXRpb25zX2xpc3QuY3N2Igpqc29uIDwtICIuL3NjYWxlZmFjdG9yc19qc29uLmpzb24iCmBgYAoKYGBge3J9CmluZm9UYWJsZSA8LSB0aWJibGUoc2FtcGxlcywgaW1ncywgc3BvdGZpbGVzLCBqc29uLCAjIEFkZCByZXF1aXJlZCBjb2x1bW5zCiAgICAgICAgICAgICAgICAgICAgc2FtcGxlID0gKCJDb250cm9sMiIpLAogICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9ICJDb250cm9sIikgIyBBZGQgYWRkaXRpb25hbCBjb2x1bW4KYGBgCgpgYGB7cn0KY29udHJvbDIgPC0gUmVhZFZpc2l1bURhdGEoaW5mb1RhYmxlKQpgYGAKCmBgYHtyfQpzcGF0aWFsX2RhdGEgPC0gR2V0U3RhZmZsaShjb250cm9sMikKY29udHJvbDIgPC0gTG9hZEltYWdlcyhjb250cm9sMikKSW1hZ2VQbG90KGNvbnRyb2wyKQpgYGAKCmBgYHtyfQpwIDwtIE1hcEZlYXR1cmVzU3VtbWFyeShjb250cm9sMiwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gIm5GZWF0dXJlX1NwYXRpYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgc3VicGxvdF90eXBlID0gInZpb2xpbiIpCnAKYGBgCmBgYHtyfQojIE5vcm1hbGl6ZSBkYXRhIGFuZCBmaW5kIHZhcmlhYmxlIGZlYXR1cmVzIGZvciBWaXNpdW0gZGF0YQpjb250cm9sMiA8LSBjb250cm9sMiB8PgogIE5vcm1hbGl6ZURhdGEoKSB8PgogIEZpbmRWYXJpYWJsZUZlYXR1cmVzKG5mZWF0dXJlcyA9IDEwMDAwKSB8PgogIFNjYWxlRGF0YSgpIHw+IAogIFJ1blBDQSgpIHw+IAogIEZpbmROZWlnaGJvcnMocmVkdWN0aW9uID0gInBjYSIsIGRpbXMgPSAxOjMwKSB8PiAKICBGaW5kQ2x1c3RlcnModmVyYm9zZSA9IEZBTFNFKSB8PiAKICBSdW5VTUFQKHJlZHVjdGlvbiA9ICJwY2EiLCBkaW1zID0gMTozMCkKYGBgCgpgYGB7cn0KcDEgPC0gRGltUGxvdChjb250cm9sMikKcDIgPC0gTWFwTGFiZWxzKGNvbnRyb2wyLCBjb2x1bW5fbmFtZSA9ICJzZXVyYXRfY2x1c3RlcnMiLCBuY29sID0gMSkgJgogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpCnAxICsgcDIKYGBgCgpgYGB7cn0KbGlicmFyeShwYXRjaHdvcmspCk1hcExhYmVscyhjb250cm9sMiwgCiAgICAgICAgICBjb2x1bW5fbmFtZSA9ICJzZXVyYXRfY2x1c3RlcnMiLCAKICAgICAgICAgIGltYWdlX3VzZSA9ICJyYXciLCAKICAgICAgICAgIG92ZXJyaWRlX3Bsb3RfZGltcyA9IFRSVUUpICsKICBwbG90X2xheW91dChndWlkZXMgPSAiY29sbGVjdCIpICYKICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemUgPSA1KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDIpKSAmCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikKYGBgCmBgYHtyfQpzYXZlUkRTKGNvbnRyb2wyLCAiL1VzZXJzL2NocmlzdGluYWNvbW8vT25lRHJpdmUgLSBUaGUgVW5pdmVyc2l0eSBvZiBDb2xvcmFkbyBEZW52ZXIvMTB4VmlzaXVtL1NwYXRpYWwvUkRTZmlsZXMvY29udHJvbDIuc2VtbGEucmRzIikKYGBgCgpgYGB7cn0KCmBgYAoKCmBgYHtyfQpzZXR3ZCgiL1VzZXJzL2NocmlzdGluYWNvbW8vT25lRHJpdmUgLSBUaGUgVW5pdmVyc2l0eSBvZiBDb2xvcmFkbyBEZW52ZXIvMTB4VmlzaXVtL1NwYXRpYWwvcmF3LmRhdGEvbXV0YW50MS8iKQpnZXR3ZCgpCgpzYW1wbGVzIDwtICgiLi9maWx0ZXJlZF9mZWF0dXJlX2JjX21hdHJpeC5oNSIpCmltZ3MgPC0gIi4vdGlzc3VlX2xvd3Jlc19pbWFnZS5wbmciCnNwb3RmaWxlcyA8LSAiLi90aXNzdWVfcG9zaXRpb25zX2xpc3QuY3N2Igpqc29uIDwtICIuL3NjYWxlZmFjdG9yc19qc29uLmpzb24iCmBgYAoKYGBge3J9CmluZm9UYWJsZSA8LSB0aWJibGUoc2FtcGxlcywgaW1ncywgc3BvdGZpbGVzLCBqc29uLCAjIEFkZCByZXF1aXJlZCBjb2x1bW5zCiAgICAgICAgICAgICAgICAgICAgc2FtcGxlID0gKCJNdXRhbnQxIiksCiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gIk11dGFudCIpICMgQWRkIGFkZGl0aW9uYWwgY29sdW1uCmBgYAoKYGBge3J9Cm11dGFudDEgPC0gUmVhZFZpc2l1bURhdGEoaW5mb1RhYmxlKQptdXRhbnQxCmBgYAoKYGBge3J9CnNwYXRpYWxfZGF0YSA8LSBHZXRTdGFmZmxpKG11dGFudDEpCm11dGFudDEgPC0gTG9hZEltYWdlcyhtdXRhbnQxKQpJbWFnZVBsb3QobXV0YW50MSkKYGBgCgpgYGB7cn0KcCA8LSBNYXBGZWF0dXJlc1N1bW1hcnkobXV0YW50MSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gIm5GZWF0dXJlX1NwYXRpYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgc3VicGxvdF90eXBlID0gInZpb2xpbiIpCnAKYGBgCgpgYGB7cn0KIyBOb3JtYWxpemUgZGF0YSBhbmQgZmluZCB2YXJpYWJsZSBmZWF0dXJlcyBmb3IgVmlzaXVtIGRhdGEKbXV0YW50MSA8LSBtdXRhbnQxIHw+CiAgTm9ybWFsaXplRGF0YSgpIHw+CiAgRmluZFZhcmlhYmxlRmVhdHVyZXMobmZlYXR1cmVzID0gMTAwMDApIHw+CiAgU2NhbGVEYXRhKCkgfD4gCiAgUnVuUENBKCkgfD4gCiAgRmluZE5laWdoYm9ycyhyZWR1Y3Rpb24gPSAicGNhIiwgZGltcyA9IDE6MzApIHw+IAogIEZpbmRDbHVzdGVycyh2ZXJib3NlID0gRkFMU0UpIHw+IAogIFJ1blVNQVAocmVkdWN0aW9uID0gInBjYSIsIGRpbXMgPSAxOjMwKQpgYGAKCmBgYHtyfQpwMSA8LSBEaW1QbG90KG11dGFudDEpCnAyIDwtIE1hcExhYmVscyhtdXRhbnQxLCBjb2x1bW5fbmFtZSA9ICJzZXVyYXRfY2x1c3RlcnMiLCBuY29sID0gMSkgJgogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpCnAxICsgcDIKYGBgCgpgYGB7cn0KTWFwTGFiZWxzKG11dGFudDEsIAogICAgICAgICAgY29sdW1uX25hbWUgPSAic2V1cmF0X2NsdXN0ZXJzIiwgCiAgICAgICAgICBpbWFnZV91c2UgPSAicmF3IiwgCiAgICAgICAgICBvdmVycmlkZV9wbG90X2RpbXMgPSBUUlVFKSArCiAgcGxvdF9sYXlvdXQoZ3VpZGVzID0gImNvbGxlY3QiKSAmCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChzaXplID0gNSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkgJgogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpCmBgYApgYGB7cn0Kc2F2ZVJEUyhtdXRhbnQxLCAiL1VzZXJzL2NocmlzdGluYWNvbW8vT25lRHJpdmUgLSBUaGUgVW5pdmVyc2l0eSBvZiBDb2xvcmFkbyBEZW52ZXIvMTB4VmlzaXVtL1NwYXRpYWwvUkRTZmlsZXMvbXV0YW50MS5zZW1sYS5yZHMiKQpgYGAKCgpgYGB7cn0Kc2V0d2QoIi9Vc2Vycy9jaHJpc3RpbmFjb21vL09uZURyaXZlIC0gVGhlIFVuaXZlcnNpdHkgb2YgQ29sb3JhZG8gRGVudmVyL1NwYXRpYWwvcmF3X2RhdGEvbXV0YW50Mi8iKQpnZXR3ZCgpCgpzYW1wbGVzIDwtICgiLi9maWx0ZXJlZF9mZWF0dXJlX2JjX21hdHJpeC5oNSIpCmltZ3MgPC0gIi4vdGlzc3VlX2xvd3Jlc19pbWFnZS5wbmciCnNwb3RmaWxlcyA8LSAiLi90aXNzdWVfcG9zaXRpb25zX2xpc3QuY3N2Igpqc29uIDwtICIuL3NjYWxlZmFjdG9yc19qc29uLmpzb24iCmBgYAoKYGBge3J9CmluZm9UYWJsZSA8LSB0aWJibGUoc2FtcGxlcywgaW1ncywgc3BvdGZpbGVzLCBqc29uLCAjIEFkZCByZXF1aXJlZCBjb2x1bW5zCiAgICAgICAgICAgICAgICAgICAgc2FtcGxlID0gKCJNdXRhbnQyIiksCiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gIk11dGFudCIpICMgQWRkIGFkZGl0aW9uYWwgY29sdW1uCmBgYAoKYGBge3J9Cm11dGFudDIgPC0gUmVhZFZpc2l1bURhdGEoaW5mb1RhYmxlKQptdXRhbnQyCmBgYAoKYGBge3J9CnNwYXRpYWxfZGF0YSA8LSBHZXRTdGFmZmxpKG11dGFudDIpCm11dGFudDIgPC0gTG9hZEltYWdlcyhtdXRhbnQyKQpJbWFnZVBsb3QobXV0YW50MikKYGBgCgpgYGB7cn0KcCA8LSBNYXBGZWF0dXJlc1N1bW1hcnkobXV0YW50MiwgCiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gIm5GZWF0dXJlX1NwYXRpYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgc3VicGxvdF90eXBlID0gInZpb2xpbiIpCnAKYGBgCgpgYGB7cn0KIyBOb3JtYWxpemUgZGF0YSBhbmQgZmluZCB2YXJpYWJsZSBmZWF0dXJlcyBmb3IgVmlzaXVtIGRhdGEKbXV0YW50MiA8LSBtdXRhbnQyIHw+CiAgTm9ybWFsaXplRGF0YSgpIHw+CiAgRmluZFZhcmlhYmxlRmVhdHVyZXMobmZlYXR1cmVzID0gMTAwMDApIHw+CiAgU2NhbGVEYXRhKCkgfD4gCiAgUnVuUENBKCkgfD4gCiAgRmluZE5laWdoYm9ycyhyZWR1Y3Rpb24gPSAicGNhIiwgZGltcyA9IDE6MzApIHw+IAogIEZpbmRDbHVzdGVycyh2ZXJib3NlID0gRkFMU0UpIHw+IAogIFJ1blVNQVAocmVkdWN0aW9uID0gInBjYSIsIGRpbXMgPSAxOjMwKQpgYGAKCmBgYHtyfQpwMSA8LSBEaW1QbG90KG11dGFudDIpCnAyIDwtIE1hcExhYmVscyhtdXRhbnQyLCBjb2x1bW5fbmFtZSA9ICJzZXVyYXRfY2x1c3RlcnMiLCBuY29sID0gMSkgJgogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpCnAxICsgcDIKYGBgCgpgYGB7cn0KTWFwTGFiZWxzKG11dGFudDIsIAogICAgICAgICAgY29sdW1uX25hbWUgPSAic2V1cmF0X2NsdXN0ZXJzIiwgCiAgICAgICAgICBpbWFnZV91c2UgPSAicmF3IiwgCiAgICAgICAgICBvdmVycmlkZV9wbG90X2RpbXMgPSBUUlVFKSArCiAgcGxvdF9sYXlvdXQoZ3VpZGVzID0gImNvbGxlY3QiKSAmCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChzaXplID0gNSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAyKSkgJgogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpCmBgYApgYGB7cn0Kc2F2ZVJEUyhtdXRhbnQyLCAiL1VzZXJzL2NocmlzdGluYWNvbW8vT25lRHJpdmUgLSBUaGUgVW5pdmVyc2l0eSBvZiBDb2xvcmFkbyBEZW52ZXIvMTB4VmlzaXVtL1NwYXRpYWwvUkRTZmlsZXMvbXV0YW50Mi5zZW1sYS5yZHMiKQpgYGAKCgo=